In [1]:
## 사전 실행 코드
import polars as pl
df_boxoffice = pl.read_csv("D:/book/polars/data/movie/KOBIS_기간별박스오피스.csv", skip_rows = 4, try_parse_dates=True)
boxoffice_cols = df_boxoffice.columns
boxoffice_cols[4] = '매출액점유율'
df_boxoffice.columns = [i.replace(' ', '') for i in boxoffice_cols]
df_boxoffice = df_boxoffice.with_columns(
pl.col('매출액', '누적매출액').str.replace_all(',', '').cast(pl.Int64),
pl.col('관객수', '누적관객수', '스크린수', '상영횟수').str.replace_all(',', '').cast(pl.Int64)
)
df_boxoffice = df_boxoffice.with_columns(
pl.col('장르').str.split(','),
pl.col('배우').str.split(','),
)
df_boxoffice = (df_boxoffice.filter(
pl.col('순위').is_not_null()).
filter(~(pl.col('장르').list.contains('성인물(에로)'))).
filter(pl.col('매출액') != 0).
filter(~((pl.col('관객수') <= 1) & (pl.col('누적관객수') <= 1) &
(pl.col('스크린수') <= 1) & (pl.col('상영횟수') <= 1)))
)
import altair as alt
import plotly.express as px
8장 폴라스로 영화 데이터 생생하게 그리기¶
8.1 폴라스 시각화의 특징 알아보기¶
8.2 폴라스로 손쉽게 데이터 시각화하기¶
8.3 영화 데이터를 시각적으로 풍부하게 표현하기¶
8.3.6 박스 플롯으로 비교하는 등급 및 장르별 관객 수 분포¶
In [2]:
(df_boxoffice.filter(pl.col('순위') <= 100)
.with_columns(pl.when(pl.col('등급') == '15세관람가,15세이상관람가')
.then(pl.lit('15세이상관람가')).otherwise(pl.col('등급')).alias('등급'))
.plot.boxplot(x = '대표국적', y = '매출액'))
Out[2]:
In [3]:
fig = px.box((df_boxoffice.filter(pl.col('순위') <= 200).explode('장르')
.with_columns((pl.col('관객수') / pl.col('상영횟수')).alias('상영횟수별관객수'))),
x = '장르', y = '상영횟수별관객수', points = "all",
title = '박스오피스 200위의 장르별 상영횟수당 관객수')
fig.show()